#include <iostream>
#include <future>
#include <thread>

int Add(int n1, int n2)
{
    return n1 + n2;
}

int main()
{
    //创建一个可调用对象task，用于后续异步执行Add
    std::packaged_task<int(int, int)> task(Add);

    //获取关联的future对象
    std::future<int> ret = task.get_future();

    //创建线程，执行任务
    std::thread t([&task]()
    {
        task(11, 22);
    });

    //获取结果
    std::cout << ret.get() << std::endl;

    //等待线程
    t.join();
    return 0;
}